package com.abc.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;

/**
 * fastJson util
 */
public class FastJsonUtil {

   private static final SerializeConfig SERIALIZE_CONFIG;

   static {
      SERIALIZE_CONFIG = new SerializeConfig();
      SERIALIZE_CONFIG.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
      SERIALIZE_CONFIG.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
   }


   private static final SerializerFeature[] SERIALIZER_FEATURES = {SerializerFeature.WriteMapNullValue, // 输出空置字段
           SerializerFeature.WriteNullListAsEmpty, // list字段如果为null，输出为[]，而不是null
           SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null，输出为0，而不是null
           SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null，输出为false，而不是null
           SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null，输出为""，而不是null
   };


   /**
    * 转换成字符串
    */
   public static String toJSONString(Object object) {
      return JSON.toJSONString(object, SERIALIZE_CONFIG);
   }


   /**
    * 转换成字符串 ,带有过滤器
    */
   public static String toJSONWithFeatures(Object object) {
      return JSON.toJSONString(object, SERIALIZE_CONFIG, SERIALIZER_FEATURES);
   }


   /**
    * 转成具体的泛型bean对象
    */
   public static <T> T toBean(String text, Class<T> clazz) {
      return JSON.parseObject(text, clazz);
   }


}